/**
 * @file         bsc_msg_rtp_monitor.h
 * @brief        双mcu远程块数据传输组件 —— 消息数据监视器
 * @note         对外公布
 * @author       Jpz(jinpuzhao@hopechart.com, 靳普诏)
 * @data         2022-12-16
 * @version      1.0
 *
 * @par          修改日志
 * <table>
 * <tr><th>Date        <th>Version               <th>Author          <th>Description
 * <tr><td>2022-12-16    <td>1.0                   <td>Jpz             <td>创建初始版本
 * @copyright    杭州鸿泉物联网技术股份有限公司
 */

#ifndef _BSC_MSG_RTP_MONITOR_H_
#define _BSC_MSG_RTP_MONITOR_H_

#include "bsc_msg_rtp_common.h"
#include "bsc_msg_rtp_cfg.h"

#ifdef __cplusplus
extern "C"
{
#endif

enum TBsMsgRtpMonitorAttrIdTag
{
    kBsMsgRtpMonitorAttrIdSendOkCnt = 0,    ///< UInt32只读 发送/重发成功计数
    kBsMsgRtpMonitorAttrIdSendFailCnt = 1,    ///< UInt32只读 重发失败计数
    kBsMsgRtpMonitorAttrIdRecvOkCnt = 2,    ///< UInt32只读 成功获取到消息包并应答成功执行推送计数
    kBsMsgRtpMonitorAttrIdRecvFailCnt = 3,    ///< UInt32只读 获取到消息包应答失败计数
    kBsMsgRtpMonitorAttrIdMaxParallel = 4,    ///< UInt32只读 发生最大一次并行发送的数据帧数量
    kBsMsgRtpMonitorAttrIdLastRecvTick = 5,   ///< UInt32只读 最后一次成功接收消息帧时的tick值
};
typedef enum TBsMsgRtpMonitorAttrIdTag TBsMsgRtpMonitorAttrId;


typedef struct TBsMsgRtpMonitorTag TBsMsgRtpMonitor;
struct TBsMsgRtpMonitorTag
{
    UInt32 send_ok_count_;      ///< 发送/重发成功计数
    UInt32 send_fail_count_;    ///< 重发失败计数
    UInt32 recv_ok_count_;      ///< 成功获取到消息包并应答成功执行推送计数
    UInt32 recv_fail_count_;    ///< 获取到消息包应答失败计数
    UInt32 last_recv_tick_;     ///< 最后一次成功接收消息帧时的tick值
    UInt8 max_parallel_num_;   ///< 最大一次并行发送的数据帧数量
    UInt8 reserve[3];           ///< 保留区域
};


/**
 * 获取整型属性值
 * @param self          对象句柄
 * @param attr_id       属性id
 * @param *r_err_code   返回错误码
 * @return 对应属性id, 此时 r_err_code == 0
 *         错误返回为0, 此时 r_err_code < 0
 * @note
 */
Int32 TBsMsgRtpMonitorGetAttrInt(TBsMsgRtpMonitor *self, Int32 attr_id, Int32 *r_err_code);



#ifdef __cplusplus
}  ///< extern "C"
#endif

#endif  ///< _BSC_MSG_RTP_MONITOR_H_


